package com.pu.controller.admin;

import com.pu.result.Result;
import com.pu.service.ReportService;
import com.pu.vo.OrderReportVO;
import com.pu.vo.SalesTop10ReportVO;
import com.pu.vo.TurnoverReportVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.pu.vo.UserReportVO;

import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;

/**
 * @Author Yusc
 * @Date 2023/11/5 23:31
 * @Version
 * @Description 可视化报表
 **/
@RestController
@RequestMapping("/admin/report")
@Slf4j
@Api(tags = "统计可视化报表相关接口")
public class ReportController {
    @Autowired
    private ReportService reportService;

    /**
     * @param begin 起始时间
     * @param end   结束时间
     * @auther: Yusc
     * @date 2023/11/5 23:35
     * @Description 营业额数据统计
     */
    @GetMapping("/turnoverStatistics")
    @ApiOperation("营业额数据统计")
    public Result<TurnoverReportVO> turnoverStatistics(
            @DateTimeFormat(pattern = "yyyy-MM-dd")
            LocalDate begin,
            @DateTimeFormat(pattern = "yyyy-MM-dd")
            LocalDate end) {
        log.info("营业额数据统计,起始时间:{},结束时间:{}", begin, end);
        return Result.success(reportService.getTurnover(begin, end));
    }

    /**
     * @param begin 开始日期
     * @param end   结束日期
     * @auther: Yusc
     * @date 2023/11/6 16:36
     * @Description 用户数据统计
     */
    @GetMapping("/userStatistics")
    @ApiOperation("用户数据统计")
    public Result<UserReportVO> userStatistics(
            @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
            @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
        log.info("用户数据统计,起始时间:{},结束时间:{}", begin, end);
        return Result.success(reportService.getUserStatistics(begin, end));
    }

    /**
     * @param begin 开始时间
     * @param end   截至时间
     * @auther: Yusc
     * @date 2023/11/6 18:34
     * @Description 订单统计
     */
    @GetMapping("/ordersStatistics")
    @ApiOperation("订单数据统计")
    public Result<OrderReportVO> orderStatistics(
            @DateTimeFormat(pattern = "yyyy-MM-dd")
            LocalDate begin,
            @DateTimeFormat(pattern = "yyyy-MM-dd")
            LocalDate end) {
        log.info("订单数据统计,起始时间:{},结束时间:{}", begin, end);
        return Result.success(reportService.getOrderStatistics(begin, end));
    }

    /**
     * @param begin 开始时间
     * @param end   截至时间
     * @auther: Yusc
     * @date 2023/11/8 15:44
     * @Description 销量排名统计
     */
    @GetMapping("/top10")
    @ApiOperation("销量排名统计")
    public Result<SalesTop10ReportVO> top10(
            @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
            @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
        log.info("销量排名统计：,起始时间:{},结束时间:{}", begin, end);
        return Result.success(reportService.getSalesTop10(begin, end));
    }

    /**
     * @param response http响应
     * @auther: Yusc
     * @date 2023/11/10 12:26
     * @Description 1. 设计Excel模板文件
     * 2. 查询近30天的运营数据
     * 3. 将查询到的运营数据写入模板文件
     * 4. 通过输出流将Excel文件下载到客户端浏览器
     */
    @GetMapping("/export")
    @ApiOperation("导出运营数据报表")
    public void export(HttpServletResponse response) {
        log.info("导出运营数据报表~~~");
        reportService.exportBusinessData(response);
    }
}
